#ifndef GOSTERICI_H
#define GOSTERICI_H

#include "vtkYorunge.h"

// Qt
#include <QtCore/QObject>
#include <QtGui/QtGui>
#include <QtOpenGL/QGLWidget>

// VTK
#include <QVTKWidget.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkAxesActor.h>
#include <vtkOrientationMarkerWidget.h>

#include <unordered_map>

/** 
 * \class Gosterici
 * \ingroup Gosterim
 * \brief QVTKWidget ve VTK'in data gosterimi araclarini bilestiren bir siniftir.
 * \author Mehmet Yigitsoy
 * \date $Date: 2013/01/03 11:23:00 $
 */
class Gosterici : public QVTKWidget {
	Q_OBJECT

public 
slots:

	/**
	 * \brief 
	 * \param y_id
	 * \returns void
	 **/
	virtual void yorungeEkle(vtkYorunge* yorunge);
	
	/**
	 * \brief 
	 * \param y_id
	 * \returns void
	 **/
	void yorungeCikar(YorungeId y_id);

	/**
	* \brief 
	* \param _id
	* \param _x
	* \param _y
	* \param _z
	* \returns void
	**/
	virtual void pozisyonEkle(YorungeId id, const Pozisyon& pozisyon);

signals:
public:
	/**
	* \brief Constructor
	* \param parent
	**/
	Gosterici(QWidget* parent = 0);
	/**
	* \brief Destructor
	**/
	virtual ~Gosterici();

	/**
	 * \brief 
	 * \returns void
	 **/
	void guncelle();

	/**
	* \brief 
	* \returns int
	**/
	int yorungeSayisi() const
	{ return static_cast<int>(m_yorunge_map.size()); };

private:
	std::map<YorungeId, VtkYorungePtr>					m_yorunge_map;

	// VTK
	vtkSmartPointer<vtkRenderer>						m_renderer;
	vtkSmartPointer<vtkRenderWindowInteractor>			m_interactor;
	vtkSmartPointer<vtkAxesActor>						m_axis;
	vtkSmartPointer<vtkOrientationMarkerWidget>			m_axes_widget; 




}; // class Gosterici
#endif // GOSTERICI_H
